package com.cw.DesignModel23.Ceational.SingletonPattern.s7;


// 静态内部类完成， 推荐使用
public class Singleton {

    //构造器私有化
    private Singleton() {}

    //写一个静态内部类,该类中有一个静态属性 Singleton
    private static class SingletonInstance {
        private static final Singleton INSTANCE = new Singleton();
    }

    //提供一个静态的公有方法，直接返回SingletonInstance.INSTANCE
    public static Singleton getInstance() {
        return SingletonInstance.INSTANCE;
    }
}

/**
 * 【分析】
 *
 * 当加载类的时候，静态内部类是不会被加载的，调用getInstance()时，静态内部类才会被装载，而且只会装载一次
 * 这种方式采用了类装载的机制来保证初始化实例时只有一个线程
 * 静态内部类方式在Singleton类被装载时并不会立即实例化，而是在需要实例化时，调用getInstance方法，才会装载Singletonlnstance类，从而完成Singleton的实例化
 * 类的静态属性只会在第一次加载类的时候初始化，所以在这里，JVM帮助我们保证了线程的安全性，在类进行初始化时，别的线程是无法进入的
 * 优点：避免了线程不安全，利用静态内部类特点实现延迟加载，效率高
 * 结论：推荐使用
 * ————————————————
 * 版权声明：本文为CSDN博主「Hello Dam」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
 * 原文链接：https://blog.csdn.net/laodanqiu/article/details/131670600
 */
